//diagramme, template, graphe...

public class Harmonisation {
	public static void harmonisation(int[] soprano) {
		// int[] soprano={21, 21, 21, 22, 23, 23, 22, 22, 21, 23, 22, 22, 21,
		// 21};
		jeuDeNotes jeu = new jeuDeNotes(soprano);

		listeSuivant suivant = new listeSuivant(jeu);
		// jeu.afficherJeuDeNotes();

		for (int i = 0; i < 20; i++) {
			suivant.nettoyerSuivant();
		}
		// suivant.afficherSuivant();
		int[] basse = new int[soprano.length];
		int[] tenor = new int[soprano.length];
		;
		int[] alto = new int[soprano.length];
		;
		int[] harmo = suivant.genererHarmo();
		int[] harmo2 = new int[jeu.jeuDeNotes.size()];
		harmo2[0] = jeu.jeuDeNotes.get(0).get(0);

		for (int i = 1; i < jeu.jeuDeNotes.size(); i++) {
			if ((jeu.jeuDeNotes.size() == 0)
					|| jeu.jeuDeNotes.get(i).size() == 0) {
				harmo2[i] = harmo2[i - 1];
			} else {
				harmo2[i] = jeu.jeuDeNotes.get(i).get(0);
			}
		}

		for (int i = 0; i < harmo2.length; i++) {
			int jeu1 = harmo2[i];
			basse[i] = (jeu1 / 10) % 100;
			tenor[i] = (jeu1 / 1000) % 100;
			alto[i] = (jeu1 / 100000) % 100;
		}
		notes.chainecharalto = new String[split.chainecharsopra.length - 1];
		notes.chainechartenor = new String[split.chainecharsopra.length - 1];
		notes.chainecharbasse = new String[split.chainecharsopra.length - 1];
		notes.midialto = new int[split.chainecharsopra.length];
		notes.miditenor = new int[split.chainecharsopra.length];
		notes.midibasse = new int[split.chainecharsopra.length];
		notes.NomNotes(alto, 0);
		notes.NomNotes(tenor, 1);
		notes.NomNotes(basse, 2);
	}

	static public int natureNote(int note, int accord) {// renvoie 1 si la note
														// est une tonique de
														// l'accord, 3 si c'est
														// une tierce, 5 si
														// c'est une quinte, et
														// 0 si la note
														// n'appartient pas Ã 
														// l'accord
		note = note % 7;
		switch (accord) {
		case 1:
			switch (note) {
			case 0:
				return 1;
			case 2:
				return 3;
			case 4:
				return 5;
			default:
				return 0;
			}

		case 2:
			switch (note) {
			case 1:
				return 1;
			case 3:
				return 3;
			case 5:
				return 5;
			default:
				return 0;
			}

		case 3:
			switch (note) {
			case 2:
				return 1;
			case 4:
				return 3;
			case 6:
				return 5;
			default:
				return 0;
			}

		case 4:
			switch (note) {
			case 3:
				return 1;
			case 5:
				return 3;
			case 0:
				return 5;
			default:
				return 0;
			}

		case 5:
			switch (note) {
			case 4:
				return 1;
			case 6:
				return 3;
			case 1:
				return 5;
			default:
				return 0;
			}

		case 6:
			switch (note) {
			case 5:
				return 1;
			case 0:
				return 3;
			case 2:
				return 5;
			default:
				return 0;
			}

		case 7:
			switch (note) {
			case 6:
				return 1;
			case 1:
				return 3;
			case 3:
				return 5;
			default:
				return 0;
			}
		default:
			return 0;
		}
	}

}
